{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "m83IiqVREJ96"
   },
   "source": [
    "# Adapting  TextAttack to Chinese Language"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "6UZ0d84hEJ98"
   },
   "source": [
    "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/QData/TextAttack/blob/master/docs/2notebook/Example_6_Chinese%20Attack.ipynb)\n",
    "\n",
    "\n",
    "[![View Source on GitHub](https://img.shields.io/badge/github-view%20source-black.svg)](https://github.com/QData/TextAttack/blob/master/docs/2notebook/Example_6_Chinese%20Attack.ipynb)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "tjqc2c5_7YaX"
   },
   "source": [
    " Please remember to run the following in your notebook enviroment before running the tutorial codes:\n",
    "\n",
    "```\n",
    "pip3 install textattack[tensorflow]\n",
    "```\n",
    "\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "qZ5xnoevEJ99"
   },
   "source": [
    "With a few additional modifications to the standard TextAttack commands, lanaguage models in Chinese can be attacked just as English models. Four transformations are available for either Chinese attack or augmentation:\n",
    "\n",
    "1. **ChineseHomophoneCharacterSwap**: transforms an input by replacing its words with substitions that share similar/identical pronounciation.\n",
    "2. **ChineseMorphonymCharacterSwap**: transforms an input by replacing its words with substitions that share similar glyph structures.\n",
    "3. **ChineseWordSwapHowNet**: transforms an input by replacing its words with synonyms provided by [OpenHownet](http://nlp.csai.tsinghua.edu.cn/).\n",
    "4. **ChineseWordSwapMaskedLM**: transforms an input with potential replacements using a masked language model."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "2EP1DJylSfkD"
   },
   "source": [
    "We begin with imports:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "5AXyxiLD4X93"
   },
   "outputs": [],
   "source": [
    "# Import required packages\n",
    "import transformers\n",
    "import string\n",
    "import os\n",
    "import pandas as pd\n",
    "import datasets\n",
    "\n",
    "# Import classes required to build an Attacker\n",
    "from textattack.models.wrappers import HuggingFaceModelWrapper\n",
    "from textattack.search_methods import GreedyWordSwapWIR\n",
    "from textattack.constraints.pre_transformation import (\n",
    "    RepeatModification,\n",
    "    StopwordModification,\n",
    ")\n",
    "from textattack.goal_functions import UntargetedClassification\n",
    "\n",
    "from textattack import Attack, Attacker, AttackArgs\n",
    "from textattack.loggers import CSVLogger\n",
    "from textattack.datasets import Dataset, HuggingFaceDataset\n",
    "\n",
    "# Import optional MUSE for higher quality examples\n",
    "from textattack.constraints.semantics.sentence_encoders import (\n",
    "    MultilingualUniversalSentenceEncoder,\n",
    ")\n",
    "\n",
    "muse = MultilingualUniversalSentenceEncoder(\n",
    "    threshold=0.9,\n",
    "    metric=\"cosine\",\n",
    "    compare_against_original=True,\n",
    "    window_size=15,\n",
    "    skip_text_shorter_than_window=True,\n",
    ")\n",
    "\n",
    "# Import the transformations\n",
    "\n",
    "from textattack.transformations import CompositeTransformation\n",
    "from textattack.transformations import ChineseWordSwapMaskedLM\n",
    "from textattack.transformations import ChineseMorphonymCharacterSwap\n",
    "from textattack.transformations import ChineseWordSwapHowNet\n",
    "from textattack.transformations import ChineseHomophoneCharacterSwap"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "1mSvCqhHSi0h"
   },
   "source": [
    "Models and datasets would also need to be set up:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "CfnC9qUFPq9h"
   },
   "outputs": [],
   "source": [
    "# In this example, we will attack a pre-trained entailment model from HugginFace (https://huggingface.co/uer/roberta-base-finetuned-chinanews-chinese)\n",
    "tokenizer = transformers.AutoTokenizer.from_pretrained(\n",
    "    \"uer/roberta-base-finetuned-chinanews-chinese\"\n",
    ")\n",
    "model = transformers.AutoModelForSequenceClassification.from_pretrained(\n",
    "    \"uer/roberta-base-finetuned-chinanews-chinese\"\n",
    ")\n",
    "model_wrapper = HuggingFaceModelWrapper(model, tokenizer)\n",
    "\n",
    "# Set goal function\n",
    "goal_function = UntargetedClassification(model_wrapper, query_budget=10000)\n",
    "\n",
    "# Set dataset from which we will generate adversraial examples\n",
    "path = os.path.abspath(\"\")\n",
    "path_list = path.split(os.sep)\n",
    "temppath = os.path.normpath(\"examples/dataset/zh_sentiment/entailment_dataset.tsv\")\n",
    "dataset = datasets.load_dataset(\"csv\", data_files=temppath, delimiter=\"\\t\")[\"train\"]\n",
    "dataset = HuggingFaceDataset(\n",
    "    dataset,\n",
    "    dataset_columns=([\"text\"], \"label\"),\n",
    "    label_names=[\n",
    "        \"Mainland China politics\",\n",
    "        \"Hong Kong - Macau politics\",\n",
    "        \"International news\",\n",
    "        \"Financial news\",\n",
    "        \"Culture\",\n",
    "        \"Entertainment\",\n",
    "        \"Sports\",\n",
    "    ],\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "XfJVzCdRSr3d"
   },
   "source": [
    "If this is your first time running Hownet, run this code block"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "Hgal-PHeQwys"
   },
   "outputs": [],
   "source": [
    "import OpenHowNet\n",
    "\n",
    "OpenHowNet.download()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "SrtoxdrMSZ0X"
   },
   "source": [
    "\n",
    "\n",
    "Now we are ready to attack! With goal function, transformation, constraints, search method, and goal function, we create the Attacker as any other TextAttack attacks\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 1000,
     "referenced_widgets": [
      "4b423038915e40158f9da4c07d09aad3",
      "3711cf0a18994cee8fc840d9a93cf5d3",
      "7f77bd7b8e5f45ae94cfc45f915c0c72",
      "fe0ca6138bc54b628c03e590c6e96aed",
      "8b39363f69eb46009c5357263a65248c",
      "6b976fd913584da69456c1b6d53483cb",
      "ea568ab2407f474da3b1f1b2540fa3a8",
      "ff6b34a7e75b443593f3dca5d050cd52",
      "4f31972fd2fd44bbac063bb4b5075e98",
      "7de1551891ec447ab6d80ea1de145f16",
      "e5e2c0507c834887b80f5717c1e6d5f3",
      "588b1321a9274de6a8a9e86622d90be4",
      "2436b07259a34ee18fe9c1007f7b615b",
      "98aac5a0baee4930bd461f2c5fd73f4a",
      "34607a8556794a5a86c18abe5bd7e5a5",
      "f78f6701ce4f4b3b9ff0af925620f261",
      "a1e3fb5cceed4e95957a17192a641b69",
      "83e9b14c4d354fdc80db4f8a881f19f3",
      "5f5457f292284dd8b914f45e26b2f749",
      "2bb72191846f49528663680a315d8b01",
      "83eff532314e4edcbfe648b321e9a310",
      "3d30e700d32443fdb37b5ab934d2d70a",
      "a132f09845a54cbe865cbe8159bb693e",
      "0af0e1eaea2f48c5b0fec6e550bd1baa",
      "dd6b0a5d9db245338a8fdb2ef5b29bf9",
      "58fc309041b54e94ae265167fa20d8d7",
      "89dfd3fdc41e417a870901bc79e47495",
      "21472d1c4c8b494a8d3660b3320e9d4b",
      "7511bb9ca5424674bb2350dff63c468a",
      "f6dd2c2cb4e346fe9af7026b5d2162e9",
      "a34ad57624fc422aa4832db3963298e6",
      "5167daffe92e44d2acc2af2d9b9738df",
      "acbfb34a353f41649675bd104069d14e",
      "be070cb4a1624b0bb8f9b594c6b951a5",
      "2edb7130713d4e10a07bbf808abb9771",
      "5ae4c618f75d4ef9b65e5020fccb6d72",
      "138d8260e67f4bc58106b9b42f7abd12",
      "d7621b5c619a4ce38ebe63924374cf78",
      "1b208b6df75f4a9e97faa4e3705a9442",
      "a7871b8ec3ec40e7bbbe6a5f40b79f4a",
      "aeb7ee752d834b4cbaa189419fd75dd4",
      "b47dfff73e73410aa89f65e3c5b0c366",
      "bdf3571e59ef4a688ab89d4badda27b1",
      "d3bab427b92144d6b9ce96eac18ceb89"
     ]
    },
    "id": "C_0Z8njnRblT",
    "outputId": "3890d784-de7f-4b70-f984-cbc9e0c7f700"
   },
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "4b423038915e40158f9da4c07d09aad3",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Downloading:   0%|          | 0.00/615 [00:00<?, ?B/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "588b1321a9274de6a8a9e86622d90be4",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Downloading:   0%|          | 0.00/1.04G [00:00<?, ?B/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "a132f09845a54cbe865cbe8159bb693e",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Downloading:   0%|          | 0.00/4.83M [00:00<?, ?B/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "be070cb4a1624b0bb8f9b594c6b951a5",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Downloading:   0%|          | 0.00/8.68M [00:00<?, ?B/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Attack(\n",
      "  (search_method): GreedyWordSwapWIR(\n",
      "    (wir_method):  weighted-saliency\n",
      "  )\n",
      "  (goal_function):  UntargetedClassification\n",
      "  (transformation):  ChineseWordSwapMaskedLM\n",
      "  (constraints): \n",
      "    (0): RepeatModification\n",
      "    (1): StopwordModification\n",
      "  (is_black_box):  True\n",
      ") \n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "  0%|          | 0/20 [00:00<?, ?it/s]\u001b[A\n",
      "  5%|▌         | 1/20 [03:10<1:00:26, 190.86s/it]\u001b[A\n",
      "[Succeeded / Failed / Skipped / Total] 0 / 1 / 0 / 1:   5%|▌         | 1/20 [03:10<1:00:26, 190.86s/it]\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--------------------------------------------- Result 1 ---------------------------------------------\n",
      "[[Sports (100%)]] --> [[[FAILED]]]\n",
      "\n",
      "林书豪新秀赛上甘心\"跑龙套\" 自称仍是底薪球员\n",
      "\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "[Succeeded / Failed / Skipped / Total] 0 / 1 / 0 / 1:  10%|█         | 2/20 [06:55<1:02:18, 207.69s/it]\u001b[A\n",
      "[Succeeded / Failed / Skipped / Total] 0 / 2 / 0 / 2:  10%|█         | 2/20 [06:55<1:02:18, 207.70s/it]\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--------------------------------------------- Result 2 ---------------------------------------------\n",
      "[[Culture (100%)]] --> [[[FAILED]]]\n",
      "\n",
      "成都现“真人图书馆”：无书“借人”给你读\n",
      "\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "[Succeeded / Failed / Skipped / Total] 0 / 2 / 0 / 2:  15%|█▌        | 3/20 [07:01<39:50, 140.61s/it]  \u001b[A\n",
      "[Succeeded / Failed / Skipped / Total] 0 / 2 / 1 / 3:  15%|█▌        | 3/20 [07:01<39:50, 140.61s/it]\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--------------------------------------------- Result 3 ---------------------------------------------\n",
      "[[Mainland china politics (57%)]] --> [[[SKIPPED]]]\n",
      "\n",
      "中国经济走向更趋稳健务实\n",
      "\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "[Succeeded / Failed / Skipped / Total] 0 / 2 / 1 / 3:  20%|██        | 4/20 [11:33<46:12, 173.28s/it]\u001b[A\n",
      "[Succeeded / Failed / Skipped / Total] 0 / 3 / 1 / 4:  20%|██        | 4/20 [11:33<46:12, 173.28s/it]\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--------------------------------------------- Result 4 ---------------------------------------------\n",
      "[[Sports (100%)]] --> [[[FAILED]]]\n",
      "\n",
      "国际田联世界挑战赛 罗伯斯迎来赛季第三冠\n",
      "\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "[Succeeded / Failed / Skipped / Total] 0 / 3 / 1 / 4:  25%|██▌       | 5/20 [14:52<44:36, 178.44s/it]\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--------------------------------------------- Result 5 ---------------------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "[Succeeded / Failed / Skipped / Total] 1 / 3 / 1 / 5:  25%|██▌       | 5/20 [14:53<44:39, 178.62s/it]\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[International news (66%)]] --> [[Entertainment (68%)]]\n",
      "\n",
      "德国一电视台合成“默克尔头巾照”惹争议\n",
      "\n",
      "德国一电视台合成“性感头巾照”惹争议\n",
      "\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "[Succeeded / Failed / Skipped / Total] 1 / 3 / 1 / 5:  30%|███       | 6/20 [14:57<34:55, 149.65s/it]\u001b[A\n",
      "[Succeeded / Failed / Skipped / Total] 1 / 3 / 2 / 6:  30%|███       | 6/20 [14:57<34:55, 149.65s/it]\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--------------------------------------------- Result 6 ---------------------------------------------\n",
      "[[Mainland china politics (80%)]] --> [[[SKIPPED]]]\n",
      "\n",
      "朴槿惠今访华 韩媒称访西安可能为增进与习近平友谊\n",
      "\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "[Succeeded / Failed / Skipped / Total] 1 / 3 / 2 / 6:  35%|███▌      | 7/20 [15:04<27:59, 129.16s/it]\u001b[A\n",
      "[Succeeded / Failed / Skipped / Total] 1 / 3 / 3 / 7:  35%|███▌      | 7/20 [15:04<27:59, 129.16s/it]\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--------------------------------------------- Result 7 ---------------------------------------------\n",
      "[[Mainland china politics (59%)]] --> [[[SKIPPED]]]\n",
      "\n",
      "中国驻休斯敦总领馆举办春节招待会向华裔拜年\n",
      "\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "[Succeeded / Failed / Skipped / Total] 1 / 3 / 3 / 7:  40%|████      | 8/20 [15:08<22:43, 113.60s/it]\u001b[A\n",
      "[Succeeded / Failed / Skipped / Total] 1 / 3 / 4 / 8:  40%|████      | 8/20 [15:08<22:43, 113.61s/it]\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--------------------------------------------- Result 8 ---------------------------------------------\n",
      "[[Culture (93%)]] --> [[[SKIPPED]]]\n",
      "\n",
      "NASA发现“地球兄弟” 具备生命存活条件\n",
      "\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "[Succeeded / Failed / Skipped / Total] 1 / 3 / 4 / 8:  45%|████▌     | 9/20 [15:13<18:36, 101.52s/it]\u001b[A\n",
      "[Succeeded / Failed / Skipped / Total] 1 / 3 / 5 / 9:  45%|████▌     | 9/20 [15:13<18:36, 101.52s/it]\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--------------------------------------------- Result 9 ---------------------------------------------\n",
      "[[Culture (53%)]] --> [[[SKIPPED]]]\n",
      "\n",
      "儿子去世后社交网站账号停用 父亲请求保留记忆\n",
      "\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "[Succeeded / Failed / Skipped / Total] 1 / 3 / 5 / 9:  50%|█████     | 10/20 [18:20<18:20, 110.06s/it]\u001b[A\n",
      "[Succeeded / Failed / Skipped / Total] 2 / 3 / 5 / 10:  50%|█████     | 10/20 [18:20<18:20, 110.06s/it]\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--------------------------------------------- Result 10 ---------------------------------------------\n",
      "[[Culture (100%)]] --> [[Entertainment (72%)]]\n",
      "\n",
      "第六届鲁迅文学奖颁发 格非等35位获奖者领奖\n",
      "\n",
      "第六届决赛颁发 格非等35位获奖者领奖\n",
      "\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "[Succeeded / Failed / Skipped / Total] 2 / 3 / 5 / 10:  55%|█████▌    | 11/20 [22:44<18:36, 124.02s/it]\u001b[A\n",
      "[Succeeded / Failed / Skipped / Total] 3 / 3 / 5 / 11:  55%|█████▌    | 11/20 [22:44<18:36, 124.02s/it]\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--------------------------------------------- Result 11 ---------------------------------------------\n",
      "[[Hong kong - macau politics (96%)]] --> [[Culture (79%)]]\n",
      "\n",
      "东莞台商欲借“台博会”搭建内销平台\n",
      "\n",
      "东莞讯欲借“艺博会”搭建内销平台\n",
      "\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "[Succeeded / Failed / Skipped / Total] 3 / 3 / 5 / 11:  60%|██████    | 12/20 [22:48<15:12, 114.07s/it]\u001b[A\n",
      "[Succeeded / Failed / Skipped / Total] 3 / 3 / 6 / 12:  60%|██████    | 12/20 [22:48<15:12, 114.07s/it]\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--------------------------------------------- Result 12 ---------------------------------------------\n",
      "[[Financial news (56%)]] --> [[[SKIPPED]]]\n",
      "\n",
      "日本网友买扇贝当下酒菜 发现内有真正珍珠(图)\n",
      "\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "[Succeeded / Failed / Skipped / Total] 3 / 3 / 6 / 12:  65%|██████▌   | 13/20 [28:59<15:36, 133.78s/it]\u001b[A\n",
      "[Succeeded / Failed / Skipped / Total] 3 / 4 / 6 / 13:  65%|██████▌   | 13/20 [28:59<15:36, 133.78s/it]\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--------------------------------------------- Result 13 ---------------------------------------------\n",
      "[[Sports (100%)]] --> [[[FAILED]]]\n",
      "\n",
      "篮球热潮席卷张江 NBA中投王与拉拉队鼎力加盟\n",
      "\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "[Succeeded / Failed / Skipped / Total] 3 / 4 / 6 / 13:  70%|███████   | 14/20 [33:40<14:26, 144.34s/it]\u001b[A\n",
      "[Succeeded / Failed / Skipped / Total] 3 / 5 / 6 / 14:  70%|███████   | 14/20 [33:40<14:26, 144.34s/it]\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--------------------------------------------- Result 14 ---------------------------------------------\n",
      "[[Sports (100%)]] --> [[[FAILED]]]\n",
      "\n",
      "UFC终极格斗冠军赛开打 \"草原狼\"遭遇三连败\n",
      "\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "[Succeeded / Failed / Skipped / Total] 3 / 5 / 6 / 14:  75%|███████▌  | 15/20 [33:45<11:15, 135.04s/it]\u001b[A\n",
      "[Succeeded / Failed / Skipped / Total] 3 / 5 / 7 / 15:  75%|███████▌  | 15/20 [33:45<11:15, 135.04s/it]\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--------------------------------------------- Result 15 ---------------------------------------------\n",
      "[[Culture (92%)]] --> [[[SKIPPED]]]\n",
      "\n",
      "水果style：心形水果惹人爱 骰子西瓜乐趣多(图)\n",
      "\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "[Succeeded / Failed / Skipped / Total] 3 / 5 / 7 / 15:  80%|████████  | 16/20 [40:09<10:02, 150.60s/it]\u001b[A\n",
      "[Succeeded / Failed / Skipped / Total] 3 / 6 / 7 / 16:  80%|████████  | 16/20 [40:09<10:02, 150.60s/it]\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--------------------------------------------- Result 16 ---------------------------------------------\n",
      "[[Sports (100%)]] --> [[[FAILED]]]\n",
      "\n",
      "同里杯中国天元赛前瞻：芈昱廷李钦诚争挑战权\n",
      "\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "[Succeeded / Failed / Skipped / Total] 3 / 6 / 7 / 16:  85%|████████▌ | 17/20 [43:32<07:41, 153.67s/it]\u001b[A\n",
      "[Succeeded / Failed / Skipped / Total] 4 / 6 / 7 / 17:  85%|████████▌ | 17/20 [43:32<07:41, 153.67s/it]\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--------------------------------------------- Result 17 ---------------------------------------------\n",
      "[[Entertainment (100%)]] --> [[Financial news (99%)]]\n",
      "\n",
      "桂纶镁为戏体验生活 东北洗衣店当店员\n",
      "\n",
      "桂纶品牌为首体验生活 东北洗衣店当家\n",
      "\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "[Succeeded / Failed / Skipped / Total] 4 / 6 / 7 / 17:  90%|█████████ | 18/20 [44:01<04:53, 146.75s/it]\u001b[A\n",
      "[Succeeded / Failed / Skipped / Total] 4 / 7 / 7 / 18:  90%|█████████ | 18/20 [44:01<04:53, 146.75s/it]\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--------------------------------------------- Result 18 ---------------------------------------------\n",
      "[[Culture (95%)]] --> [[[FAILED]]]\n",
      "\n",
      "河南羲皇故都朝祖会流传6000年 一天游客80万人\n",
      "\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "[Succeeded / Failed / Skipped / Total] 4 / 7 / 7 / 18:  95%|█████████▌| 19/20 [44:07<02:19, 139.35s/it]\u001b[A\n",
      "[Succeeded / Failed / Skipped / Total] 4 / 7 / 8 / 19:  95%|█████████▌| 19/20 [44:07<02:19, 139.35s/it]\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--------------------------------------------- Result 19 ---------------------------------------------\n",
      "[[Culture (92%)]] --> [[[SKIPPED]]]\n",
      "\n",
      "辛柏青谈追求妻子：用1袋洗衣粉、2块肥皂打动她的\n",
      "\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "[Succeeded / Failed / Skipped / Total] 4 / 7 / 8 / 19: 100%|██████████| 20/20 [49:19<00:00, 147.96s/it]\u001b[A\n",
      "[Succeeded / Failed / Skipped / Total] 5 / 7 / 8 / 20: 100%|██████████| 20/20 [49:19<00:00, 147.96s/it]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--------------------------------------------- Result 20 ---------------------------------------------\n",
      "[[International news (100%)]] --> [[Mainland china politics (66%)]]\n",
      "\n",
      "朝鲜谴责韩国前方部队打出反朝口号\n",
      "\n",
      "中国谴责日本前方部队打出侵略口号\n",
      "\n",
      "\n",
      "\n",
      "+-------------------------------+--------+\n",
      "| Attack Results                |        |\n",
      "+-------------------------------+--------+\n",
      "| Number of successful attacks: | 5      |\n",
      "| Number of failed attacks:     | 7      |\n",
      "| Number of skipped attacks:    | 8      |\n",
      "| Original accuracy:            | 60.0%  |\n",
      "| Accuracy under attack:        | 35.0%  |\n",
      "| Attack success rate:          | 41.67% |\n",
      "| Average perturbed word %:     | 36.39% |\n",
      "| Average num. words per input: | 9.3    |\n",
      "| Avg num queries:              | 45.5   |\n",
      "+-------------------------------+--------+\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "# transformation, using ChineseWordSwapMaskedLM transformation in this example\n",
    "\n",
    "transformation = ChineseWordSwapMaskedLM()\n",
    "\n",
    "# constraint\n",
    "stopwords = set(\n",
    "    [\n",
    "        \"、\",\n",
    "        \"。\",\n",
    "        \"〈\",\n",
    "        \"〉\",\n",
    "        \"《\",\n",
    "        \"》\",\n",
    "        \"一\",\n",
    "        \"一个\",\n",
    "        \"一些\",\n",
    "        \"一何\",\n",
    "        \"一切\",\n",
    "        \"一则\",\n",
    "        \"一方面\",\n",
    "        \"一旦\",\n",
    "        \"一来\",\n",
    "        \"一样\",\n",
    "        \"一种\",\n",
    "        \"一般\",\n",
    "        \"一转眼\",\n",
    "        \"七\",\n",
    "        \"万一\",\n",
    "        \"三\",\n",
    "        \"上\",\n",
    "        \"上下\",\n",
    "        \"下\",\n",
    "        \"不\",\n",
    "        \"不仅\",\n",
    "        \"不但\",\n",
    "        \"不光\",\n",
    "        \"不单\",\n",
    "        \"不只\",\n",
    "        \"不外乎\",\n",
    "        \"不如\",\n",
    "        \"不妨\",\n",
    "        \"不尽\",\n",
    "        \"不尽然\",\n",
    "        \"不得\",\n",
    "        \"不怕\",\n",
    "        \"不惟\",\n",
    "        \"不成\",\n",
    "        \"不拘\",\n",
    "        \"不料\",\n",
    "        \"不是\",\n",
    "        \"不比\",\n",
    "        \"不然\",\n",
    "        \"不特\",\n",
    "        \"不独\",\n",
    "        \"不管\",\n",
    "        \"不至于\",\n",
    "        \"不若\",\n",
    "        \"不论\",\n",
    "        \"不过\",\n",
    "        \"不问\",\n",
    "        \"与\",\n",
    "        \"与其\",\n",
    "        \"与其说\",\n",
    "        \"与否\",\n",
    "        \"与此同时\",\n",
    "        \"且\",\n",
    "        \"且不说\",\n",
    "        \"且说\",\n",
    "        \"两者\",\n",
    "        \"个\",\n",
    "        \"个别\",\n",
    "        \"中\",\n",
    "        \"临\",\n",
    "        \"为\",\n",
    "        \"为了\",\n",
    "        \"为什么\",\n",
    "        \"为何\",\n",
    "        \"为止\",\n",
    "        \"为此\",\n",
    "        \"为着\",\n",
    "        \"乃\",\n",
    "        \"乃至\",\n",
    "        \"乃至于\",\n",
    "        \"么\",\n",
    "        \"之\",\n",
    "        \"之一\",\n",
    "        \"之所以\",\n",
    "        \"之类\",\n",
    "        \"乌乎\",\n",
    "        \"乎\",\n",
    "        \"乘\",\n",
    "        \"九\",\n",
    "        \"也\",\n",
    "        \"也好\",\n",
    "        \"也罢\",\n",
    "        \"了\",\n",
    "        \"二\",\n",
    "        \"二来\",\n",
    "        \"于\",\n",
    "        \"于是\",\n",
    "        \"于是乎\",\n",
    "        \"云云\",\n",
    "        \"云尔\",\n",
    "        \"五\",\n",
    "        \"些\",\n",
    "        \"亦\",\n",
    "        \"人\",\n",
    "        \"人们\",\n",
    "        \"人家\",\n",
    "        \"什\",\n",
    "        \"什么\",\n",
    "        \"什么样\",\n",
    "        \"今\",\n",
    "        \"介于\",\n",
    "        \"仍\",\n",
    "        \"仍旧\",\n",
    "        \"从\",\n",
    "        \"从此\",\n",
    "        \"从而\",\n",
    "        \"他\",\n",
    "        \"他人\",\n",
    "        \"他们\",\n",
    "        \"他们们\",\n",
    "        \"以\",\n",
    "        \"以上\",\n",
    "        \"以为\",\n",
    "        \"以便\",\n",
    "        \"以免\",\n",
    "        \"以及\",\n",
    "        \"以故\",\n",
    "        \"以期\",\n",
    "        \"以来\",\n",
    "        \"以至\",\n",
    "        \"以至于\",\n",
    "        \"以致\",\n",
    "        \"们\",\n",
    "        \"任\",\n",
    "        \"任何\",\n",
    "        \"任凭\",\n",
    "        \"会\",\n",
    "        \"似的\",\n",
    "        \"但\",\n",
    "        \"但凡\",\n",
    "        \"但是\",\n",
    "        \"何\",\n",
    "        \"何以\",\n",
    "        \"何况\",\n",
    "        \"何处\",\n",
    "        \"何时\",\n",
    "        \"余外\",\n",
    "        \"作为\",\n",
    "        \"你\",\n",
    "        \"你们\",\n",
    "        \"使\",\n",
    "        \"使得\",\n",
    "        \"例如\",\n",
    "        \"依\",\n",
    "        \"依据\",\n",
    "        \"依照\",\n",
    "        \"便于\",\n",
    "        \"俺\",\n",
    "        \"俺们\",\n",
    "        \"倘\",\n",
    "        \"倘使\",\n",
    "        \"倘或\",\n",
    "        \"倘然\",\n",
    "        \"倘若\",\n",
    "        \"借\",\n",
    "        \"借傥然\",\n",
    "        \"假使\",\n",
    "        \"假如\",\n",
    "        \"假若\",\n",
    "        \"做\",\n",
    "        \"像\",\n",
    "        \"儿\",\n",
    "        \"先不先\",\n",
    "        \"光\",\n",
    "        \"光是\",\n",
    "        \"全体\",\n",
    "        \"全部\",\n",
    "        \"八\",\n",
    "        \"六\",\n",
    "        \"兮\",\n",
    "        \"共\",\n",
    "        \"关于\",\n",
    "        \"关于具体地说\",\n",
    "        \"其\",\n",
    "        \"其一\",\n",
    "        \"其中\",\n",
    "        \"其二\",\n",
    "        \"其他\",\n",
    "        \"其余\",\n",
    "        \"其它\",\n",
    "        \"其次\",\n",
    "        \"具体地说\",\n",
    "        \"具体说来\",\n",
    "        \"兼之\",\n",
    "        \"内\",\n",
    "        \"再\",\n",
    "        \"再其次\",\n",
    "        \"再则\",\n",
    "        \"再有\",\n",
    "        \"再者\",\n",
    "        \"再者说\",\n",
    "        \"再说\",\n",
    "        \"冒\",\n",
    "        \"冲\",\n",
    "        \"况且\",\n",
    "        \"几\",\n",
    "        \"几时\",\n",
    "        \"凡\",\n",
    "        \"凡是\",\n",
    "        \"凭\",\n",
    "        \"凭借\",\n",
    "        \"出于\",\n",
    "        \"出来\",\n",
    "        \"分\",\n",
    "        \"分别\",\n",
    "        \"则\",\n",
    "        \"则甚\",\n",
    "        \"别\",\n",
    "        \"别人\",\n",
    "        \"别处\",\n",
    "        \"别是\",\n",
    "        \"别的\",\n",
    "        \"别管\",\n",
    "        \"别说\",\n",
    "        \"到\",\n",
    "        \"前后\",\n",
    "        \"前此\",\n",
    "        \"前者\",\n",
    "        \"加之\",\n",
    "        \"加以\",\n",
    "        \"区\",\n",
    "        \"即\",\n",
    "        \"即令\",\n",
    "        \"即使\",\n",
    "        \"即便\",\n",
    "        \"即如\",\n",
    "        \"即或\",\n",
    "        \"即若\",\n",
    "        \"却\",\n",
    "        \"去\",\n",
    "        \"又\",\n",
    "        \"又及\",\n",
    "        \"及\",\n",
    "        \"及其\",\n",
    "        \"及至\",\n",
    "        \"反之\",\n",
    "        \"反而\",\n",
    "        \"反过来\",\n",
    "        \"反过来说\",\n",
    "        \"受到\",\n",
    "        \"另\",\n",
    "        \"另一方面\",\n",
    "        \"另外\",\n",
    "        \"另悉\",\n",
    "        \"只\",\n",
    "        \"只当\",\n",
    "        \"只怕\",\n",
    "        \"只是\",\n",
    "        \"只有\",\n",
    "        \"只消\",\n",
    "        \"只要\",\n",
    "        \"只限\",\n",
    "        \"叫\",\n",
    "        \"叮咚\",\n",
    "        \"可\",\n",
    "        \"可以\",\n",
    "        \"可是\",\n",
    "        \"可见\",\n",
    "        \"各\",\n",
    "        \"各个\",\n",
    "        \"各位\",\n",
    "        \"各种\",\n",
    "        \"各自\",\n",
    "        \"同\",\n",
    "        \"同时\",\n",
    "        \"后\",\n",
    "        \"后者\",\n",
    "        \"向\",\n",
    "        \"向使\",\n",
    "        \"向着\",\n",
    "        \"吓\",\n",
    "        \"吗\",\n",
    "        \"否则\",\n",
    "        \"吧\",\n",
    "        \"吧哒\",\n",
    "        \"含\",\n",
    "        \"吱\",\n",
    "        \"呀\",\n",
    "        \"呃\",\n",
    "        \"呕\",\n",
    "        \"呗\",\n",
    "        \"呜\",\n",
    "        \"呜呼\",\n",
    "        \"呢\",\n",
    "        \"呵\",\n",
    "        \"呵呵\",\n",
    "        \"呸\",\n",
    "        \"呼哧\",\n",
    "        \"咋\",\n",
    "        \"和\",\n",
    "        \"咚\",\n",
    "        \"咦\",\n",
    "        \"咧\",\n",
    "        \"咱\",\n",
    "        \"咱们\",\n",
    "        \"咳\",\n",
    "        \"哇\",\n",
    "        \"哈\",\n",
    "        \"哈哈\",\n",
    "        \"哉\",\n",
    "        \"哎\",\n",
    "        \"哎呀\",\n",
    "        \"哎哟\",\n",
    "        \"哗\",\n",
    "        \"哟\",\n",
    "        \"哦\",\n",
    "        \"哩\",\n",
    "        \"哪\",\n",
    "        \"哪个\",\n",
    "        \"哪些\",\n",
    "        \"哪儿\",\n",
    "        \"哪天\",\n",
    "        \"哪年\",\n",
    "        \"哪怕\",\n",
    "        \"哪样\",\n",
    "        \"哪边\",\n",
    "        \"哪里\",\n",
    "        \"哼\",\n",
    "        \"哼唷\",\n",
    "        \"唉\",\n",
    "        \"唯有\",\n",
    "        \"啊\",\n",
    "        \"啐\",\n",
    "        \"啥\",\n",
    "        \"啦\",\n",
    "        \"啪达\",\n",
    "        \"啷当\",\n",
    "        \"喂\",\n",
    "        \"喏\",\n",
    "        \"喔唷\",\n",
    "        \"喽\",\n",
    "        \"嗡\",\n",
    "        \"嗡嗡\",\n",
    "        \"嗬\",\n",
    "        \"嗯\",\n",
    "        \"嗳\",\n",
    "        \"嘎\",\n",
    "        \"嘎登\",\n",
    "        \"嘘\",\n",
    "        \"嘛\",\n",
    "        \"嘻\",\n",
    "        \"嘿\",\n",
    "        \"嘿嘿\",\n",
    "        \"四\",\n",
    "        \"因\",\n",
    "        \"因为\",\n",
    "        \"因了\",\n",
    "        \"因此\",\n",
    "        \"因着\",\n",
    "        \"因而\",\n",
    "        \"固然\",\n",
    "        \"在\",\n",
    "        \"在下\",\n",
    "        \"在于\",\n",
    "        \"地\",\n",
    "        \"基于\",\n",
    "        \"处在\",\n",
    "        \"多\",\n",
    "        \"多么\",\n",
    "        \"多少\",\n",
    "        \"大\",\n",
    "        \"大家\",\n",
    "        \"她\",\n",
    "        \"她们\",\n",
    "        \"好\",\n",
    "        \"如\",\n",
    "        \"如上\",\n",
    "        \"如上所述\",\n",
    "        \"如下\",\n",
    "        \"如何\",\n",
    "        \"如其\",\n",
    "        \"如同\",\n",
    "        \"如是\",\n",
    "        \"如果\",\n",
    "        \"如此\",\n",
    "        \"如若\",\n",
    "        \"始而\",\n",
    "        \"孰料\",\n",
    "        \"孰知\",\n",
    "        \"宁\",\n",
    "        \"宁可\",\n",
    "        \"宁愿\",\n",
    "        \"宁肯\",\n",
    "        \"它\",\n",
    "        \"它们\",\n",
    "        \"对\",\n",
    "        \"对于\",\n",
    "        \"对待\",\n",
    "        \"对方\",\n",
    "        \"对比\",\n",
    "        \"将\",\n",
    "        \"小\",\n",
    "        \"尔\",\n",
    "        \"尔后\",\n",
    "        \"尔尔\",\n",
    "        \"尚且\",\n",
    "        \"就\",\n",
    "        \"就是\",\n",
    "        \"就是了\",\n",
    "        \"就是说\",\n",
    "        \"就算\",\n",
    "        \"就要\",\n",
    "        \"尽\",\n",
    "        \"尽管\",\n",
    "        \"尽管如此\",\n",
    "        \"岂但\",\n",
    "        \"己\",\n",
    "        \"已\",\n",
    "        \"已矣\",\n",
    "        \"巴\",\n",
    "        \"巴巴\",\n",
    "        \"年\",\n",
    "        \"并\",\n",
    "        \"并且\",\n",
    "        \"庶乎\",\n",
    "        \"庶几\",\n",
    "        \"开外\",\n",
    "        \"开始\",\n",
    "        \"归\",\n",
    "        \"归齐\",\n",
    "        \"当\",\n",
    "        \"当地\",\n",
    "        \"当然\",\n",
    "        \"当着\",\n",
    "        \"彼\",\n",
    "        \"彼时\",\n",
    "        \"彼此\",\n",
    "        \"往\",\n",
    "        \"待\",\n",
    "        \"很\",\n",
    "        \"得\",\n",
    "        \"得了\",\n",
    "        \"怎\",\n",
    "        \"怎么\",\n",
    "        \"怎么办\",\n",
    "        \"怎么样\",\n",
    "        \"怎奈\",\n",
    "        \"怎样\",\n",
    "        \"总之\",\n",
    "        \"总的来看\",\n",
    "        \"总的来说\",\n",
    "        \"总的说来\",\n",
    "        \"总而言之\",\n",
    "        \"恰恰相反\",\n",
    "        \"您\",\n",
    "        \"惟其\",\n",
    "        \"慢说\",\n",
    "        \"我\",\n",
    "        \"我们\",\n",
    "        \"或\",\n",
    "        \"或则\",\n",
    "        \"或是\",\n",
    "        \"或曰\",\n",
    "        \"或者\",\n",
    "        \"截至\",\n",
    "        \"所\",\n",
    "        \"所以\",\n",
    "        \"所在\",\n",
    "        \"所幸\",\n",
    "        \"所有\",\n",
    "        \"才\",\n",
    "        \"才能\",\n",
    "        \"打\",\n",
    "        \"打从\",\n",
    "        \"把\",\n",
    "        \"抑或\",\n",
    "        \"拿\",\n",
    "        \"按\",\n",
    "        \"按照\",\n",
    "        \"换句话说\",\n",
    "        \"换言之\",\n",
    "        \"据\",\n",
    "        \"据此\",\n",
    "        \"接着\",\n",
    "        \"故\",\n",
    "        \"故此\",\n",
    "        \"故而\",\n",
    "        \"旁人\",\n",
    "        \"无\",\n",
    "        \"无宁\",\n",
    "        \"无论\",\n",
    "        \"既\",\n",
    "        \"既往\",\n",
    "        \"既是\",\n",
    "        \"既然\",\n",
    "        \"日\",\n",
    "        \"时\",\n",
    "        \"时候\",\n",
    "        \"是\",\n",
    "        \"是以\",\n",
    "        \"是的\",\n",
    "        \"更\",\n",
    "        \"曾\",\n",
    "        \"替\",\n",
    "        \"替代\",\n",
    "        \"最\",\n",
    "        \"月\",\n",
    "        \"有\",\n",
    "        \"有些\",\n",
    "        \"有关\",\n",
    "        \"有及\",\n",
    "        \"有时\",\n",
    "        \"有的\",\n",
    "        \"望\",\n",
    "        \"朝\",\n",
    "        \"朝着\",\n",
    "        \"本\",\n",
    "        \"本人\",\n",
    "        \"本地\",\n",
    "        \"本着\",\n",
    "        \"本身\",\n",
    "        \"来\",\n",
    "        \"来着\",\n",
    "        \"来自\",\n",
    "        \"来说\",\n",
    "        \"极了\",\n",
    "        \"果然\",\n",
    "        \"果真\",\n",
    "        \"某\",\n",
    "        \"某个\",\n",
    "        \"某些\",\n",
    "        \"某某\",\n",
    "        \"根据\",\n",
    "        \"欤\",\n",
    "        \"正值\",\n",
    "        \"正如\",\n",
    "        \"正巧\",\n",
    "        \"正是\",\n",
    "        \"此\",\n",
    "        \"此地\",\n",
    "        \"此处\",\n",
    "        \"此外\",\n",
    "        \"此时\",\n",
    "        \"此次\",\n",
    "        \"此间\",\n",
    "        \"毋宁\",\n",
    "        \"每\",\n",
    "        \"每当\",\n",
    "        \"比\",\n",
    "        \"比及\",\n",
    "        \"比如\",\n",
    "        \"比方\",\n",
    "        \"没奈何\",\n",
    "        \"沿\",\n",
    "        \"沿着\",\n",
    "        \"漫说\",\n",
    "        \"点\",\n",
    "        \"焉\",\n",
    "        \"然则\",\n",
    "        \"然后\",\n",
    "        \"然而\",\n",
    "        \"照\",\n",
    "        \"照着\",\n",
    "        \"犹且\",\n",
    "        \"犹自\",\n",
    "        \"甚且\",\n",
    "        \"甚么\",\n",
    "        \"甚或\",\n",
    "        \"甚而\",\n",
    "        \"甚至\",\n",
    "        \"甚至于\",\n",
    "        \"用\",\n",
    "        \"用来\",\n",
    "        \"由\",\n",
    "        \"由于\",\n",
    "        \"由是\",\n",
    "        \"由此\",\n",
    "        \"由此可见\",\n",
    "        \"的\",\n",
    "        \"的确\",\n",
    "        \"的话\",\n",
    "        \"直到\",\n",
    "        \"相对而言\",\n",
    "        \"省得\",\n",
    "        \"看\",\n",
    "        \"眨眼\",\n",
    "        \"着\",\n",
    "        \"着呢\",\n",
    "        \"矣\",\n",
    "        \"矣乎\",\n",
    "        \"矣哉\",\n",
    "        \"离\",\n",
    "        \"秒\",\n",
    "        \"称\",\n",
    "        \"竟而\",\n",
    "        \"第\",\n",
    "        \"等\",\n",
    "        \"等到\",\n",
    "        \"等等\",\n",
    "        \"简言之\",\n",
    "        \"管\",\n",
    "        \"类如\",\n",
    "        \"紧接着\",\n",
    "        \"纵\",\n",
    "        \"纵令\",\n",
    "        \"纵使\",\n",
    "        \"纵然\",\n",
    "        \"经\",\n",
    "        \"经过\",\n",
    "        \"结果\",\n",
    "        \"给\",\n",
    "        \"继之\",\n",
    "        \"继后\",\n",
    "        \"继而\",\n",
    "        \"综上所述\",\n",
    "        \"罢了\",\n",
    "        \"者\",\n",
    "        \"而\",\n",
    "        \"而且\",\n",
    "        \"而况\",\n",
    "        \"而后\",\n",
    "        \"而外\",\n",
    "        \"而已\",\n",
    "        \"而是\",\n",
    "        \"而言\",\n",
    "        \"能\",\n",
    "        \"能否\",\n",
    "        \"腾\",\n",
    "        \"自\",\n",
    "        \"自个儿\",\n",
    "        \"自从\",\n",
    "        \"自各儿\",\n",
    "        \"自后\",\n",
    "        \"自家\",\n",
    "        \"自己\",\n",
    "        \"自打\",\n",
    "        \"自身\",\n",
    "        \"至\",\n",
    "        \"至于\",\n",
    "        \"至今\",\n",
    "        \"至若\",\n",
    "        \"致\",\n",
    "        \"般的\",\n",
    "        \"若\",\n",
    "        \"若夫\",\n",
    "        \"若是\",\n",
    "        \"若果\",\n",
    "        \"若非\",\n",
    "        \"莫不然\",\n",
    "        \"莫如\",\n",
    "        \"莫若\",\n",
    "        \"虽\",\n",
    "        \"虽则\",\n",
    "        \"虽然\",\n",
    "        \"虽说\",\n",
    "        \"被\",\n",
    "        \"要\",\n",
    "        \"要不\",\n",
    "        \"要不是\",\n",
    "        \"要不然\",\n",
    "        \"要么\",\n",
    "        \"要是\",\n",
    "        \"譬喻\",\n",
    "        \"譬如\",\n",
    "        \"让\",\n",
    "        \"许多\",\n",
    "        \"论\",\n",
    "        \"设使\",\n",
    "        \"设或\",\n",
    "        \"设若\",\n",
    "        \"诚如\",\n",
    "        \"诚然\",\n",
    "        \"该\",\n",
    "        \"说\",\n",
    "        \"说来\",\n",
    "        \"请\",\n",
    "        \"诸\",\n",
    "        \"诸位\",\n",
    "        \"诸如\",\n",
    "        \"谁\",\n",
    "        \"谁人\",\n",
    "        \"谁料\",\n",
    "        \"谁知\",\n",
    "        \"贼死\",\n",
    "        \"赖以\",\n",
    "        \"赶\",\n",
    "        \"起\",\n",
    "        \"起见\",\n",
    "        \"趁\",\n",
    "        \"趁着\",\n",
    "        \"越是\",\n",
    "        \"距\",\n",
    "        \"跟\",\n",
    "        \"较\",\n",
    "        \"较之\",\n",
    "        \"边\",\n",
    "        \"过\",\n",
    "        \"还\",\n",
    "        \"还是\",\n",
    "        \"还有\",\n",
    "        \"还要\",\n",
    "        \"这\",\n",
    "        \"这一来\",\n",
    "        \"这个\",\n",
    "        \"这么\",\n",
    "        \"这么些\",\n",
    "        \"这么样\",\n",
    "        \"这么点儿\",\n",
    "        \"这些\",\n",
    "        \"这会儿\",\n",
    "        \"这儿\",\n",
    "        \"这就是说\",\n",
    "        \"这时\",\n",
    "        \"这样\",\n",
    "        \"这次\",\n",
    "        \"这般\",\n",
    "        \"这边\",\n",
    "        \"这里\",\n",
    "        \"进而\",\n",
    "        \"连\",\n",
    "        \"连同\",\n",
    "        \"逐步\",\n",
    "        \"通过\",\n",
    "        \"遵循\",\n",
    "        \"遵照\",\n",
    "        \"那\",\n",
    "        \"那个\",\n",
    "        \"那么\",\n",
    "        \"那么些\",\n",
    "        \"那么样\",\n",
    "        \"那些\",\n",
    "        \"那会儿\",\n",
    "        \"那儿\",\n",
    "        \"那时\",\n",
    "        \"那样\",\n",
    "        \"那般\",\n",
    "        \"那边\",\n",
    "        \"那里\",\n",
    "        \"都\",\n",
    "        \"鄙人\",\n",
    "        \"鉴于\",\n",
    "        \"针对\",\n",
    "        \"阿\",\n",
    "        \"除\",\n",
    "        \"除了\",\n",
    "        \"除外\",\n",
    "        \"除开\",\n",
    "        \"除此之外\",\n",
    "        \"除非\",\n",
    "        \"随\",\n",
    "        \"随后\",\n",
    "        \"随时\",\n",
    "        \"随着\",\n",
    "        \"难道说\",\n",
    "        \"零\",\n",
    "        \"非\",\n",
    "        \"非但\",\n",
    "        \"非徒\",\n",
    "        \"非特\",\n",
    "        \"非独\",\n",
    "        \"靠\",\n",
    "        \"顺\",\n",
    "        \"顺着\",\n",
    "        \"首先\",\n",
    "        \"︿\",\n",
    "        \"！\",\n",
    "        \"＃\",\n",
    "        \"＄\",\n",
    "        \"％\",\n",
    "        \"＆\",\n",
    "        \"（\",\n",
    "        \"）\",\n",
    "        \"＊\",\n",
    "        \"＋\",\n",
    "        \"，\",\n",
    "        \"０\",\n",
    "        \"１\",\n",
    "        \"２\",\n",
    "        \"３\",\n",
    "        \"４\",\n",
    "        \"５\",\n",
    "        \"６\",\n",
    "        \"７\",\n",
    "        \"８\",\n",
    "        \"９\",\n",
    "        \"：\",\n",
    "        \"；\",\n",
    "        \"＜\",\n",
    "        \"＞\",\n",
    "        \"？\",\n",
    "        \"＠\",\n",
    "        \"［\",\n",
    "        \"］\",\n",
    "        \"｛\",\n",
    "        \"｜\",\n",
    "        \"｝\",\n",
    "        \"～\",\n",
    "        \"￥\",\n",
    "    ]\n",
    ")\n",
    "stopwords = stopwords.union(set(string.punctuation))\n",
    "constraints = [RepeatModification(), StopwordModification(stopwords=stopwords)]\n",
    "\n",
    "# search method\n",
    "search_method = GreedyWordSwapWIR(wir_method=\"weighted-saliency\")\n",
    "\n",
    "# attack!\n",
    "attack = Attack(goal_function, constraints, transformation, search_method)\n",
    "attack_args = AttackArgs(num_examples=20)\n",
    "attacker = Attacker(attack, dataset, attack_args)\n",
    "attack_results = attacker.attack_dataset()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "3e_tQiHWS-Pb"
   },
   "source": [
    "As aforementioned, we can also augment Chinese sentences with the provided transformation. A quick examples is shown below:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "43MCRE0pqVM0",
    "outputId": "2ad12bf5-3bd8-4c8d-913c-949fcae787d3"
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Building prefix dict from the default dictionary ...\n",
      "DEBUG:jieba:Building prefix dict from the default dictionary ...\n",
      "Dumping model to file cache /tmp/jieba.cache\n",
      "DEBUG:jieba:Dumping model to file cache /tmp/jieba.cache\n",
      "Loading model cost 0.888 seconds.\n",
      "DEBUG:jieba:Loading model cost 0.888 seconds.\n",
      "Prefix dict has been built successfully.\n",
      "DEBUG:jieba:Prefix dict has been built successfully.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "['听见树林的呢喃，发现溪流中的知织。', '听见树林的呢喃，发视溪流中的知识。']"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from textattack.constraints.pre_transformation import RepeatModification\n",
    "from textattack.constraints.pre_transformation import StopwordModification\n",
    "from textattack.augmentation import Augmenter\n",
    "\n",
    "# transformation\n",
    "transformation = ChineseMorphonymCharacterSwap()\n",
    "\n",
    "# constraints\n",
    "constraints = [RepeatModification(), StopwordModification()]\n",
    "\n",
    "# Create augmenter with specified parameters\n",
    "augmenter = Augmenter(\n",
    "    transformation=transformation, pct_words_to_swap=0.1, transformations_per_example=2\n",
    ")\n",
    "s = \"听见树林的呢喃，发现溪流中的知识。\"\n",
    "\n",
    "# Augment!\n",
    "augmenter.augment(s)"
   ]
  }
 ],
 "metadata": {
  "colab": {
   "provenance": []
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.11"
  },
  "widgets": {
   "application/vnd.jupyter.widget-state+json": {
    "0af0e1eaea2f48c5b0fec6e550bd1baa": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_21472d1c4c8b494a8d3660b3320e9d4b",
      "placeholder": "​",
      "style": "IPY_MODEL_7511bb9ca5424674bb2350dff63c468a",
      "value": "Downloading: 100%"
     }
    },
    "138d8260e67f4bc58106b9b42f7abd12": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_bdf3571e59ef4a688ab89d4badda27b1",
      "placeholder": "​",
      "style": "IPY_MODEL_d3bab427b92144d6b9ce96eac18ceb89",
      "value": " 8.68M/8.68M [00:00&lt;00:00, 16.8MB/s]"
     }
    },
    "1b208b6df75f4a9e97faa4e3705a9442": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "21472d1c4c8b494a8d3660b3320e9d4b": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "2436b07259a34ee18fe9c1007f7b615b": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_a1e3fb5cceed4e95957a17192a641b69",
      "placeholder": "​",
      "style": "IPY_MODEL_83e9b14c4d354fdc80db4f8a881f19f3",
      "value": "Downloading: 100%"
     }
    },
    "2bb72191846f49528663680a315d8b01": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "ProgressStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "2edb7130713d4e10a07bbf808abb9771": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_1b208b6df75f4a9e97faa4e3705a9442",
      "placeholder": "​",
      "style": "IPY_MODEL_a7871b8ec3ec40e7bbbe6a5f40b79f4a",
      "value": "Downloading: 100%"
     }
    },
    "34607a8556794a5a86c18abe5bd7e5a5": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_83eff532314e4edcbfe648b321e9a310",
      "placeholder": "​",
      "style": "IPY_MODEL_3d30e700d32443fdb37b5ab934d2d70a",
      "value": " 1.04G/1.04G [00:25&lt;00:00, 45.4MB/s]"
     }
    },
    "3711cf0a18994cee8fc840d9a93cf5d3": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_6b976fd913584da69456c1b6d53483cb",
      "placeholder": "​",
      "style": "IPY_MODEL_ea568ab2407f474da3b1f1b2540fa3a8",
      "value": "Downloading: 100%"
     }
    },
    "3d30e700d32443fdb37b5ab934d2d70a": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "4b423038915e40158f9da4c07d09aad3": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HBoxModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_3711cf0a18994cee8fc840d9a93cf5d3",
       "IPY_MODEL_7f77bd7b8e5f45ae94cfc45f915c0c72",
       "IPY_MODEL_fe0ca6138bc54b628c03e590c6e96aed"
      ],
      "layout": "IPY_MODEL_8b39363f69eb46009c5357263a65248c"
     }
    },
    "4f31972fd2fd44bbac063bb4b5075e98": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "ProgressStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "5167daffe92e44d2acc2af2d9b9738df": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "588b1321a9274de6a8a9e86622d90be4": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HBoxModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_2436b07259a34ee18fe9c1007f7b615b",
       "IPY_MODEL_98aac5a0baee4930bd461f2c5fd73f4a",
       "IPY_MODEL_34607a8556794a5a86c18abe5bd7e5a5"
      ],
      "layout": "IPY_MODEL_f78f6701ce4f4b3b9ff0af925620f261"
     }
    },
    "58fc309041b54e94ae265167fa20d8d7": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_5167daffe92e44d2acc2af2d9b9738df",
      "placeholder": "​",
      "style": "IPY_MODEL_acbfb34a353f41649675bd104069d14e",
      "value": " 4.83M/4.83M [00:00&lt;00:00, 12.1MB/s]"
     }
    },
    "5ae4c618f75d4ef9b65e5020fccb6d72": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "FloatProgressModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "success",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_aeb7ee752d834b4cbaa189419fd75dd4",
      "max": 9096718,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_b47dfff73e73410aa89f65e3c5b0c366",
      "value": 9096718
     }
    },
    "5f5457f292284dd8b914f45e26b2f749": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "6b976fd913584da69456c1b6d53483cb": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "7511bb9ca5424674bb2350dff63c468a": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "7de1551891ec447ab6d80ea1de145f16": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "7f77bd7b8e5f45ae94cfc45f915c0c72": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "FloatProgressModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "success",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_ff6b34a7e75b443593f3dca5d050cd52",
      "max": 615,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_4f31972fd2fd44bbac063bb4b5075e98",
      "value": 615
     }
    },
    "83e9b14c4d354fdc80db4f8a881f19f3": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "83eff532314e4edcbfe648b321e9a310": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "89dfd3fdc41e417a870901bc79e47495": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "8b39363f69eb46009c5357263a65248c": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "98aac5a0baee4930bd461f2c5fd73f4a": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "FloatProgressModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "success",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_5f5457f292284dd8b914f45e26b2f749",
      "max": 1115590446,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_2bb72191846f49528663680a315d8b01",
      "value": 1115590446
     }
    },
    "a132f09845a54cbe865cbe8159bb693e": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HBoxModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_0af0e1eaea2f48c5b0fec6e550bd1baa",
       "IPY_MODEL_dd6b0a5d9db245338a8fdb2ef5b29bf9",
       "IPY_MODEL_58fc309041b54e94ae265167fa20d8d7"
      ],
      "layout": "IPY_MODEL_89dfd3fdc41e417a870901bc79e47495"
     }
    },
    "a1e3fb5cceed4e95957a17192a641b69": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "a34ad57624fc422aa4832db3963298e6": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "ProgressStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "a7871b8ec3ec40e7bbbe6a5f40b79f4a": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "acbfb34a353f41649675bd104069d14e": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "aeb7ee752d834b4cbaa189419fd75dd4": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "b47dfff73e73410aa89f65e3c5b0c366": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "ProgressStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "bdf3571e59ef4a688ab89d4badda27b1": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "be070cb4a1624b0bb8f9b594c6b951a5": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HBoxModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_2edb7130713d4e10a07bbf808abb9771",
       "IPY_MODEL_5ae4c618f75d4ef9b65e5020fccb6d72",
       "IPY_MODEL_138d8260e67f4bc58106b9b42f7abd12"
      ],
      "layout": "IPY_MODEL_d7621b5c619a4ce38ebe63924374cf78"
     }
    },
    "d3bab427b92144d6b9ce96eac18ceb89": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "d7621b5c619a4ce38ebe63924374cf78": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "dd6b0a5d9db245338a8fdb2ef5b29bf9": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "FloatProgressModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "success",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_f6dd2c2cb4e346fe9af7026b5d2162e9",
      "max": 5069051,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_a34ad57624fc422aa4832db3963298e6",
      "value": 5069051
     }
    },
    "e5e2c0507c834887b80f5717c1e6d5f3": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "ea568ab2407f474da3b1f1b2540fa3a8": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "f6dd2c2cb4e346fe9af7026b5d2162e9": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "f78f6701ce4f4b3b9ff0af925620f261": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "fe0ca6138bc54b628c03e590c6e96aed": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_7de1551891ec447ab6d80ea1de145f16",
      "placeholder": "​",
      "style": "IPY_MODEL_e5e2c0507c834887b80f5717c1e6d5f3",
      "value": " 615/615 [00:00&lt;00:00, 33.8kB/s]"
     }
    },
    "ff6b34a7e75b443593f3dca5d050cd52": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    }
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
